package cn.xydata.es;

import cn.xydata.common.dto.ParamsDto;
import cn.xydata.common.dto.ResponsePageDto;
import cn.xydata.dto.company.company.QueryCompanyPageSearchObjectDto;
import cn.xydata.dto.tax.comprehensive.QueryComprehensivePageSearchObjectDto;
import cn.xydata.dto.tax.payment.TaxPaymentSearchObjectDto;
import cn.xydata.vo.company.company.QueryCompanyPageDataVo;
import cn.xydata.vo.tax.comprehensive.QueryComprehensivePageDataVo;
import cn.xydata.vo.tax.payment.TaxPaymentDataVo;
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import co.elastic.clients.json.JsonData;


/**
 * @author zsw
 * @date 2024/03/07
 */
public interface EsService {

    /**
     * 企业分页
     *
     * @param paramsDto 分页条件
     * @return 企业分页结果
     */
    ResponsePageDto<QueryCompanyPageDataVo> companyPage(ParamsDto<QueryCompanyPageSearchObjectDto> paramsDto);

    /**
     * 综合查询分页
     *
     * @param paramsDto 分页条件
     * @return 综合查询分页
     */
    ResponsePageDto<QueryComprehensivePageDataVo> comprehensivePage(ParamsDto<QueryComprehensivePageSearchObjectDto> paramsDto);

    /**
     * 企业税务数据分页
     *
     * @param paramsDto 分页条件
     * @return 税务数据分页
     */
    ResponsePageDto<TaxPaymentDataVo> taxPaymentPage(ParamsDto<TaxPaymentSearchObjectDto> paramsDto);

    /**
     * 查询税款数据合计
     *
     * @param searchObject 查询条件
     * @return 税款合计
     */
    TaxPaymentDataVo queryTaxPaymentTotal(TaxPaymentSearchObjectDto searchObject);

    /**
     * 新增 (支持修改)
     *
     * @param indexName 索引名
     * @param docId 文档id
     * @param o 文档对象
     */
    void insert(String indexName, String docId, Object o);

    /**
     * 修改
     *
     * @param indexName 索引名
     * @param query 查询条件
     * @param jsonData 新文档
     */
    void update(String indexName, Query query, JsonData jsonData);

    /**
     * 根据条件删除
     *
     * @param indexName 索引名
     * @param query 查询条件
     */
    void deleteByQuery(String indexName, Query query);

    /**
     * 删除
     *
     * @param indexName 索引名
     * @param docId 文档id
     */
    void deleteByDocId(String indexName, String docId);
}
